package cn.learn.activiti.service;

import cn.learn.activiti.domain.ActNodeConfig;
import cn.learn.activiti.domain.CurrentTaskVo;

import java.util.Map;

/**
 * 操作流程实例
 *
 * @author huangyezhan
 * @version 1.0
 * @date 2021年03月11日17:54
 */
public interface IProcessService {

    /**
     * 启动任务
     * 要先校验用户身份
     *
     * @param processKey    流程key
     * @param businessKey   业务key
     * @param variables     变量
     * @param actNodeConfig 节点的一些配置信息
     * @return 返回结果
     */
    CurrentTaskVo startProcess(String processKey, String businessKey, Map<String, Object> variables, ActNodeConfig actNodeConfig);

    /**
     * 挂起流程
     *
     * @param processInstanceId 流程实例ID
     */
    void suspendProcessInstanceById(String processInstanceId);

    /**
     * 激活流程
     *
     * @param processInstanceId 流程实例ID
     */
    void activateProcessInstanceById(String processInstanceId);

    /**
     * 删除流程
     * 要先校验用户身份
     *
     * @param executionId 流程id
     * @param reason      删除原因
     */
    void deleteProcessInstances(String executionId, String reason);

}
